package com.xbongbong.saas.service;

import com.xbongbong.paas.pojo.dto.FormDataListDTO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.purchaseproduct.pojo.dto.PurchaseProductDeleteBatchDTO;
import com.xbongbong.pro.purchaseproduct.pojo.dto.PurchaseProductListDTO;
import com.xbongbong.pro.purchaseproduct.pojo.vo.PurchaseProductDeleteBatchVO;
import com.xbongbong.pro.purchaseproduct.pojo.vo.PurchaseProductListVO;
import com.xbongbong.saas.domain.entity.PurchaseProductEntity;
import com.xbongbong.saas.domain.entity.ext.PurchaseEntityExt;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 产品库存
 * @author Jian.Wang
 * @date 2019/2/21 15:51
 * @since v1.0
 * @version v1.0
 */
public interface PurchaseProductService {
    /**
     * 插入数据
     *
     * @param purchaseProductEntity 采购合同产品实体数据
     * @return 是否成功
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     **/
    Integer insert(PurchaseProductEntity purchaseProductEntity);
    /**
     * 更新数据
     *
     * @param purchaseProductEntity 采购合同产品实体数据
     * @return 是否成功
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     **/
    Integer update(PurchaseProductEntity purchaseProductEntity);
    /**
     * 保存数据
     *
     * @param purchaseProductEntity 保存实体
     * @return java.lang.Integer
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    Integer save(PurchaseProductEntity purchaseProductEntity);
    /**
     * 根据主键删除记录
     *
     * @param id    主键
     * @param corpid 公司id
     * @return java.lang.Integer
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    Integer deleteByKey(Long id, String corpid);
    /**
     * 删除采购合同下的所有产品
     *
     * @param purchaseSheetId    id集合
     * @param purchaseSheetId 采购合同Id
     * @param corpid 公司id
     * @return java.lang.Integer
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    Integer deleteByPurchaseId(Long purchaseSheetId, String corpid);
    /**
     * 删除多条采购合同下的所有产品
     *
     * @param purchaseProductDeleteBatchDTO
     * @return java.lang.Integer
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    PurchaseProductDeleteBatchVO deleteByPurchaseIdIn(PurchaseProductDeleteBatchDTO purchaseProductDeleteBatchDTO) throws XbbException;
    /**
     * 获取一条采购合同产品数据
     *
     * @param id 采购合同产品ID
     * @param corpid 公司id
     * @return PurchaseProductEntity 一条数据实体
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    PurchaseProductEntity getByKey(Long id, String corpid);
    /**
     * 多参数查询多条数据
     *
     * @param param 参数集合
     * @return List<PurchaseProductEntity> 数据集合
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    List<PurchaseProductEntity> findEntitys(Map<String, Object> param);
    /**
     * 获取记录数
     *
     * @param param 参数集合
     * @return  List<Long> Id集合
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    Integer getEntitysCount(Map<String, Object> param);
    /**
     * 根据参数集合获取所有的采购合同产品
     *
     * @param param 参数集合
     * @return  List<Long> Id集合
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
    List<PurchaseProductEntity> getAllByPurchaseId(Map<String, Object> param);
    /**
     * 关联查询
     *
     * @param param 参数集合
     * @return  List<Long> Id集合
     * @author Jian.Wang
     * @date 2019/2/21 15:18
     */
     List<PurchaseProductEntity> findEntitysJoinProduct(Map<String, Object> param);

    /**
     * 导入采购合同时保存关联产品
     *
     * @param purchase 采购合同
     * @author GuoJun.HU
     * @since 3.26
     * 创建时间 2018/7/24 14:11
     */
     void setPurchaseProduct(PurchaseEntityExt purchase);

    /**
     * 获取采购合同关联产品
     *
     * @param corpid      公司id
     * @param purchaseId  采购合同id
     * @param containsDel 是否包含已被删除的产品
     * @return 采购合同产品列表
     * @author 周智
     * 创建时间：2018-1-26 10:40
     */
     List<PurchaseProductEntity> getProductsByPurchaseId(String corpid, Long purchaseId, boolean containsDel);

    /**
     * 采购合同和关联产品的对应关系
     *
     * @param corpid        公司id
     * @param purchaseList  采购合同id
     * @param containsDel   是否包含已被删除的产品
     * @author GuoJun.HU
     * @since 3.26
     * 创建时间 2018/8/3 18:13
     */
     Map<Long, List<PurchaseProductEntity>> getProductsByPurchaseList(String corpid, Collection<PurchaseEntityExt> purchaseList, boolean containsDel);

    /**
     * 采购合同和关联产品的对应关系
     *
     * @param  allPurchaseProductList 采购合同关联产品列表
     * @author GuoJun.HU
     * @since 3.26
     * 创建时间 2018/8/3 19:13
     */
     Map<Long, List<PurchaseProductEntity>> wrapPurchaseListToMap(List<PurchaseProductEntity> allPurchaseProductList);

    /**
     * 通过产品名称或编号查询对应的采购合同id
     *
     * @param corpid       公司id
     * @param nameOrNoLike 产品名称或编号
     * @author lcx
     * 创建时间 2018/7/18 10:08
     */
     List<Long> findPurchaseIds(String corpid, String nameOrNoLike);
     
     /**  
      * 获取采购合同
      * @author 吴峰  
      * @date 2019/2/27 20:57
      * @param purchaseProductListDTO 传参
      * @return com.xbongbong.pro.purchaseproduct.pojo.vo.PurchaseProductListVO
      * @throws XbbException 业务异常       
      */  
     PurchaseProductListVO findPurchaseProduct(PurchaseProductListDTO purchaseProductListDTO) throws XbbException;

    /**
     * 多参数查询多条数据
     *
     * @param
     * @return List<PurchaseProductEntity> 数据集合
     * @author jiping.yang
     * @date 2021/09/09 15:18
     */
    List<PurchaseProductEntity> findProductEntitys(FormDataListDTO formDataListDTO,Map<String, Object> param) throws XbbException;

    /**
     * 获取记录数
     *
     * @param param 参数集合
     * @return  List<Long> Id集合
     * @author jiping.yang
     * @date 2021/9/17 15:18
     */
    Integer getPurchaseProductCount(Map<String, Object> param);

    /**
     * 根据合同id和corpid查询数据
     *
     * @param
     * @return List<PurchaseProductEntity> 数据集合
     * @author jiping.yang
     * @date 2021/10/09 15:18
     */
    List<PurchaseProductEntity> getContractPurchase(String corpid , Long dataId) throws XbbException;
}
